package com.he.validator;

import com.he.domain.dto.CommentDTO;
import com.he.enums.CommentTypeEnum;
import com.he.validator.groups.ArticleTalk;
import com.he.validator.groups.Link;
import com.he.validator.groups.ParentIdNotNull;
import com.he.validator.groups.ParentIdNull;
import org.hibernate.validator.spi.group.DefaultGroupSequenceProvider;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * @author He
 * @version 1.0
 * @Date 2023/9/27 18:27
 * @Desc 评论分组校验器 根据不同的评论情况动态地为 CommentDTO 对象选择适当的校验分组
 */
public class CommentProvider implements DefaultGroupSequenceProvider<CommentDTO> {
    @Override
    public List<Class<?>> getValidationGroups(CommentDTO commentDTO) {
        List<Class<?>> defaultGroupSequence = new ArrayList<>();
        defaultGroupSequence.add(CommentDTO.class);
        if (commentDTO != null) {
            //如果是文章类型或者说说类型添加对应的校验分组
            if (commentDTO.getCommentType().equals(CommentTypeEnum.ARTICLE.getType()) || commentDTO.getCommentType().equals(CommentTypeEnum.TALK.getType())) {
                defaultGroupSequence.add(ArticleTalk.class);
            }
            //如果是友链类型评论
            if (commentDTO.getCommentType().equals(CommentTypeEnum.LINK.getType())) {
                defaultGroupSequence.add(Link.class);
            }
            //如果父评论id为空
            if (Objects.isNull(commentDTO.getParentId())) {
                defaultGroupSequence.add(ParentIdNull.class);
            }
            //如果父评论id不为空
            if (Objects.nonNull(commentDTO.getParentId())) {
                defaultGroupSequence.add(ParentIdNotNull.class);
            }
        }
        return defaultGroupSequence;
    }
}
